package algo3.grupo3.vista;


import algo3.grupo3.modelo.Bomba;
import algo3.grupo3.modelo.Bombita;

public class EntidadBombita extends Entidad /**implements ActionListener*/{

	public static final int ALTO_BOMBITA=50, ANCHO_BOMBITA = 50;
	public static final String PATH_IMAGEN_BOMBITA= "images//bomberman.gif";
	
	public final int NO_MOVERSE= -1;
	public final int MOVERSE_ARRIBA= 0,MOVERSE_IZQUIERDA=1,MOVERSE_ABAJO=2,MOVERSE_DERECHA=3;
	private double cronometroMovimiento= 0.0;
	private int siguienteMovimiento= NO_MOVERSE;
	
	/**private Timer timer= new Timer(DELAY_TIMER,this);
	public static int DELAY_TIMER= 20;
	private final ThreadBombita THREAD_BOMBITA= new ThreadBombita();*/
	
	public EntidadBombita(int ancho,int alto,Bombita b){
		super(ancho,alto,b);
		establecerApariencia();
	}//fin de constructor
	
	public EntidadBombita(Bombita b){
		super(ANCHO_BOMBITA,ALTO_BOMBITA,b);
		establecerApariencia();
	}//fin de constructor
	
	@Override
	public synchronized void actualizar(double tiempo){
		super.actualizar(tiempo);
		if(this.objeto== null)
			return;
		if(siguienteMovimiento== NO_MOVERSE)
			return;
		this.cronometroMovimiento+= tiempo;
		this.mover();
	
		
	}//fin de actualizar
	//METODO AGREGADO
	
	private void mover(){
		Bombita b= (Bombita)objeto;
		
		if(b== null)
			return;
		
		double delayMovimiento= b.obtenerDelayMovimiento();
		if(this.cronometroMovimiento>= delayMovimiento){
			switch(siguienteMovimiento){
			case MOVERSE_ARRIBA:
				b.moverArriba();
				break;
			case MOVERSE_IZQUIERDA:
				b.moverIzquierda();
				break;
			case MOVERSE_ABAJO:
				b.moverAbajo();
				break;
			case MOVERSE_DERECHA:
				b.moverDerecha();
				break;
			}//fin de switch
			this.resetearCronometro();
			this.establecerSiguienteMovimiento(NO_MOVERSE);
		}//fin de if
			
		
	}//fin de mover
	
	public void resetearCronometro(){
		this.cronometroMovimiento=0.0;
	}//resetearCronometros
	
	@Override
	protected void establecerApariencia(){
		super.cambiarApariencia(PATH_IMAGEN_BOMBITA);
	}//fin de establecerApariencia
	
	public synchronized void plantarBomba(Bomba b){
		if(b==null || logicaJuego== null)
			return;
		logicaJuego.agregarBomba(b);
	}//fin de plantarBomba
	
	public synchronized void establecerSiguienteMovimiento(int sm){
		if(sm<NO_MOVERSE || sm>MOVERSE_DERECHA)
			return;
		this.siguienteMovimiento= sm;
		this.resetearCronometro();
	}//fin de establecerSiguienteMovimiento

	public synchronized int obtenerSiguienteMovimiento(){
		return this.siguienteMovimiento;
	}//fin de obtenerSiguienteMovimiento
	
	
	/**@Override
	public void actionPerformed(ActionEvent arg0) {
		this.THREAD_BOMBITA.run();
	}//fin de actionPerformed
	
	private class ThreadBombita implements Runnable{
		@Override
		public void run() {	
			actualizar(DELAY_TIMER);
		}//fin de run		
	}//fin de ThreadBombita
	
	public void descongelar(){
		this.timer.start();
	}//fin de descongelar
	
	public void congelar(){
		this.timer.stop();
	}//fin de congelar*/
	
}//fin de EntidadBombita
